nAG Fortran コンパイラ 7.1 マニュアル

 
ナビゲーション:前へ   上へ   次へ

11.7 プログラム単位と手続き

  • [7.0] OPERATOR総称の一部である関数の仮引数にVALUE属性がある場合、 INTENT(IN)属性を持つ必要がなくなりました。

    例)

           INTERFACE OPERATOR(+)
              MODULE PROCEDURE logplus
           END INTERFACE
           ...
           PURE LOGICAL FUNCTION logplus(a,b)
              LOGICAL,VALUE :: a,b
              logplus = a.OR.b
           END FUNCTION
    
  • [7.0] ASSIGNMENT総称の一部であるサブルーチンの2番目の引数にVALUE属性がある場合、 INTENT(IN)属性を持つ必要がなくなりました。

    例)

           INTERFACE ASSIGNMENT(=)
              MODULE PROCEDURE asgnli
           END INTERFACE
           ...
           PURE SUBROUTINE asgnli(a,b)
              LOGICAL,INTENT(OUT) :: a
              INTEGER,VALUE :: b
              DO WHILE (IAND(b,NOT(1))/=0)
                 b = IEOR(IAND(b,1),SHIFTR(b,1))
              END DO
              a = b/=0 ! Odd number of "1" bits.
           END SUBROUTINE
    
  • [7.0] -recursiveまたは-f2018オプションを使用すると、手続きはデフォルトで再帰的になります。
    例)
           INTEGER FUNCTION factorial(n) RESULT(r)
              IF (n>1) THEN
                 r = n*factorial(n-1)
              ELSE
                 r = 1
              END IF
           END FUNCTION
    
    上記サブプログラムはRECURSIVEキーワードで明示的に宣言されているかのように有効です。

    これは、サイズ引継ぎ文字関数には適用されません(結果がCHARACTER(LEN=*)で宣言されている場合、これらはRECURSIVEで宣言されないままです。)

    デフォルトでRECURSIVEの手続きは、RECURSIVEとして明示的に宣言されている場合とまったく同じように、-save省略可能な効果から除外されることに注意してください。

  • [7.0] RECURSIVEが明示的に宣言されているか、デフォルトで(-f2018または-recursiveオプションが指定されている場合)、要素別処理手続きが再帰的になる可能性があります。
    例)
           ELEMENTAL RECURSIVE INTEGER FUNCTION factorial(n) RESULT(r)
              INTEGER,INTENT(IN) :: n
              IF (n>1) THEN
                 r = n*factorial(n-1)
              ELSE
                 r = 1
              END IF
           END FUNCTION
    
    上記は以下のように呼び出すことが可能です。
           PRINT *,factorial( [ 1,2,3,4,5 ] )
    
    これにより最初の5つの階乗を出力されます。
  • NON_RECURSIVEキーワードは、手続きが再帰的に呼び出されないことを明示的に宣言します。
    例)
           NON_RECURSIVE INTEGER FUNCTION factorial(n) RESULT(r)
              r = 1
              DO i=2,n
                 r = r*i
              END DO
           END FUNCTION
    

    Fortran 2008以前の標準では、手続きがデフォルトで非再帰的であるため、 -recursiveまたは-f2018が使用されていない限り、このキーワードは効果がありません。

© 隴鯉ス・隴幢スャ郢昜ケ斟礼ケ晢スシ郢晢ス。郢晢スェ郢ァ�ォ郢晢スォ郢ァ�「郢晢スォ郢ァ�エ郢晢スェ郢ァ�コ郢晢ソス郢ァ�コ郢ァ�ー郢晢スォ郢晢スシ郢晉軸�ス�ェ陟台ク茨スシ螟ゑス、�セ 2025
Privacy Policy  /  Trademarks